home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 03 (1982-11)(Softdisk)(Side B).zip / Softdisk Magazette Volume 2, No. 03 (1982-11)(Softdisk)(Side B).do / NIMBOT.bas < prev    next >
BASIC Source File  |  1996-12-24  |  9KB  |  229 lines

  1. 1  REM  ********************
  2. 2  REM  ***              ***
  3. 3  REM  ***    NIMBOT    ***
  4. 4  REM  ***              ***
  5. 5  REM  *** MARK CAPELLA ***
  6. 6  REM  ***   09/18/79   ***
  7. 7  REM  ***              ***
  8. 8  REM  ********************
  9. 9  REM 
  10. 15  REM 
  11. 16  REM  ***
  12. 17  REM  *** PRE GAME SET UP
  13. 18  REM  ***
  14. 19  REM 
  15. 20 XXHEAD = 12:XBODY = 13:XFEET = 14:FACE = 1:LARM = 2:RARM = 3
  16. 25 KBD = 49152:STROBE = 49168:TIME = 300
  17. 27 AQ =  PEEK(175) + PEEK(176) *256 -819
  18. 30  POKE 232,AQ - INT(AQ/256) *256: POKE 233, INT(AQ/256)
  19. 40  DIM ROBOT(7,3,3),HEAD(11,8),ARM(4),PMOVES(19,3)
  20. 50  DEF  FN XF(X0) = 20 +(X0 -1) *35: DEF  FN YF(Y0) = 30 +(Y0 -1) *60
  21. 51  FOR I = 1 TO 19: READ PM(I,1),PM(I,2),PM(I,3): NEXT 
  22. 52  DATA 0,2,2,2,0,2,2,2,0,0,3,3,3,0,3,3,3,0,4,4,0,1,1,1,3,2,1,3,1,2,2,3,1,2,1,3,1,2,3,1,3,2,5,4,1,1,0,0,0,1,0,0,0,1,0,0,0 
  23. 60  FOR I = 1 TO 11: FOR J = 1 TO 8
  24. 61  READ HEAD(I,J): IF HEAD(I,J) >0  THEN HEAD(I,0) = HEAD(I,0) +1
  25. 62  NEXT J,I
  26. 63  DATA 2,5,4,0,0,0,0,0,1,4,5,6,3,0,0,0,2,5,6,0,0,0,0,0,1,2,5,8,7,10,0,0,1,2,3,4,6,7,8,9,3,2,5,8,9,11,0,0,4,5,8,0,0,0,0,0,7,4,5,6,9,0,0,0,8,5,6,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0
  27. 95  REM 
  28. 96  REM 
  29. 100  REM ***********************
  30. 101  REM               ***
  31. 104  GOSUB 10000: REM  *** INSTS
  32. 105  GOSUB 20000: REM  *** SETUP
  33. 110  GOSUB 1000: REM   *** PLAY
  34. 111  GOTO 105: REM     ***
  35. 112  REM               ***
  36. 113  REM ***********************
  37. 114  REM 
  38. 995  REM 
  39. 996  REM  ***
  40. 997  REM  *** PLAY THE GAME
  41. 998  REM  ***
  42. 999  REM 
  43. 1000  ON ( INT( RND(1) *5) >2) +1 GOSUB 2000,2025
  44. 1005  GOSUB 3000: REM  KEYIN
  45. 1010  IF NMN >0  THEN 1000
  46. 1015  FOR I = 1 TO 1000: NEXT 
  47. 1020  TEXT : HOME : VTAB 3: IF   NOT MM  THEN  PRINT "   <CTRL-G>I DON'T BELIEVE IT BUT YOU WON !!": PRINT "IT IS NOT EASY TO BEAT THE COMPUTER": PRINT "AT IT'S OWN GAME !!": GOTO 1030
  48. 1025  PRINT "<CTRL-G>   WELL THE GAME IS OVER AND IT LOOKS": PRINT "LIKE YOU LOST... BUT DON'T WORRY, IT IS": PRINT "NOT EASY TO BEAT THE COMPUTER AT IT'S": PRINT "FAVORITE GAME !!"
  49. 1030  PRINT : PRINT : INPUT "DO YOU WISH TO PLAY AGAIN : ";ANS$: IF  LEFT$(ANS$,1) = "Y"  THEN  RETURN 
  50. 1040  HOME : PRINT "<CTRL-G>THANK-YOU FOR PLAYING NIMBOT !!": VTAB 20: END 
  51. 1095  REM 
  52. 1096  REM  ***
  53. 1097  REM  *** MOVE A FACE
  54. 1098  REM  ***
  55. 1099  REM 
  56. 2000 XPSN =  INT( RND(1) *7) +1:YPSN =  INT( RND(1) *3) +1
  57. 2005  IF   NOT ROBOT(XPSN,YPSN,FACE)  THEN 2000
  58. 2010  HCOLOR= 0: GOSUB 21050
  59. 2015 ROBOT(XPSN,YPSN,FACE) = HEAD(ROBOT(XPSN,YPSN,FACE), INT( RND(1) *HEAD(ROBOT(XPSN,YPSN,FACE),0)) +1)
  60. 2019  HCOLOR= 3: GOSUB 21050: RETURN 
  61. 2020  REM 
  62. 2021  REM  ***
  63. 2022  REM  *** MOVE AN ARM
  64. 2023  REM  ***
  65. 2024  REM 
  66. 2025 XPSN =  INT( RND(1) *7) +1:YPSN =  INT( RND(1) *3) +1
  67. 2030  IF   NOT ROBOT(XPSN,YPSN,FACE)  THEN 2025
  68. 2035 WHICH =  INT( RND(1) *2) +1: HCOLOR= 0: ON WHICH GOSUB 21055,21060
  69. 2040 ROBOT(XPSN,YPSN,WHICH +1) = ARM(ROBOT(XPSN,YPSN,WHICH +1) -14)
  70. 2045  HCOLOR= 3: ON WHICH GOSUB 21055,21060: RETURN 
  71. 2995  REM 
  72. 2996  REM  ***
  73. 2997  REM  *** GET THE ROW #
  74. 2998  REM  ***
  75. 2999  REM 
  76. 3000  IF COUNT  THEN 3200
  77. 3005  IF MMODE  THEN  GOSUB 4000: GOTO 3015
  78. 3010  GOSUB 3030
  79. 3015  IF KEY <177  OR KEY >179  THEN  RETURN 
  80. 3020 COUNT = 1:K1 = KEY -176: HCOLOR= 3
  81. 3024  DRAW K1 +20 AT 5, FN YF(K1) +20: RETURN 
  82. 3025  REM 
  83. 3026  REM  ***
  84. 3027  REM  *** GET THE INPUT KEY
  85. 3028  REM  ***
  86. 3029  REM 
  87. 3030 KEY =  PEEK(KBD): POKE STROBE,0: RETURN 
  88. 3195  REM 
  89. 3196  REM  ***
  90. 3197  REM  *** GET THE # OF MEN
  91. 3198  REM  ***
  92. 3199  REM 
  93. 3200  IF MMODE  THEN MMODE = 0:KEY = 176 +K2: GOTO 3215
  94. 3205  GOSUB 3030: IF KEY <177  OR KEY >181  THEN  RETURN 
  95. 3210 MMODE = 1:XC = 0
  96. 3215 COUNT = 0:K2 = KEY -176: DRAW K2 +20 AT 5, FN YF(K1)
  97. 3220  GOSUB 3300: IF OK  THEN  GOSUB 3500: GOSUB 3800: GOSUB 3600: GOSUB 3700: GOTO 3230
  98. 3225 COUNT = 0:MMODE = 0
  99. 3230  HCOLOR= 0: DRAW K1 +20 AT 5, FN YF(K1) +20: DRAW K2 +20 AT 5, FN YF(K1): RETURN 
  100. 3295  REM 
  101. 3296  REM  ***
  102. 3297  REM  *** CHECK THE INPUT #
  103. 3298  REM  ***
  104. 3299  REM 
  105. 3300 XPSN = 1:YPSN = K1: GOSUB 3405
  106. 3305 XH = 5: GOSUB 3400: GOSUB 3415
  107. 3310  GOSUB 3405:XH = 4: GOSUB 3400: GOSUB 3420
  108. 3315  GOSUB 3405:XH = 10: GOSUB 3400: GOSUB 3415
  109. 3320  GOSUB 3405
  110. 3325  FOR XH = 4 TO 6: GOSUB 3400: GOSUB 3420: GOSUB 3405: NEXT 
  111. 3330 XH = 11: GOSUB 3400: GOSUB 3415: GOSUB 3405
  112. 3335  FOR XH = 6 TO 5  STEP  -1: GOSUB 3400: GOSUB 3420: GOSUB 3405: NEXT 
  113. 3340  IF ROBOT(0,K1,FACE) > = K2  THEN 3360
  114. 3345 XH = 4: GOSUB 3410:XH = 5: GOSUB 3410
  115. 3350 XH = 6: GOSUB 3410:XH = 5: GOSUB 3410:XH = 4: GOSUB 3410
  116. 3355 XH = 5: GOSUB 3410:XH = 6: GOSUB 3410:XH = 5: GOSUB 3410:OK = 0: RETURN 
  117. 3360 XH = 2: GOSUB 3410:XH = 5: GOSUB 3410:XH = 8: GOSUB 3410:XH = 5
  118. 3365  GOSUB 3410:XH = 2: GOSUB 3410:XH = 5: GOSUB 3410:XH = 8
  119. 3370  GOSUB 3410:XH = 5: GOSUB 3410:OK = 1: RETURN 
  120. 3395  REM 
  121. 3396  REM  ***
  122. 3397  REM  *** MOVE HEADS
  123. 3398  REM  ***
  124. 3399  REM 
  125. 3400 ROBOT(XPSN,YPSN,FACE) = XH: HCOLOR= 3: GOSUB 21050: RETURN 
  126. 3405  HCOLOR= 0: GOSUB 21050: RETURN 
  127. 3410  GOSUB 3405: GOSUB 3400: GOSUB 3425: RETURN 
  128. 3415  FOR PAUSE = 1 TO TIME/2: NEXT : RETURN 
  129. 3420  FOR PAUSE = 1 TO TIME: NEXT : RETURN 
  130. 3425  FOR PAUSE = 1 TO TIME/4: NEXT : RETURN 
  131. 3495  REM 
  132. 3496  REM  ***
  133. 3497  REM  *** OK TO SHOOT
  134. 3498  REM  ***
  135. 3499  REM 
  136. 3500 XH = 6: GOSUB 3410:XH = 11: GOSUB 3410
  137. 3505  IF ROBOT(XPSN,YPSN,RARM) = 18  THEN XH = 17: GOSUB 3515
  138. 3510 XH = 18: GOSUB 3515:XH = 19: GOSUB 3515:XH = 20: GOSUB 3515: GOSUB 3425: RETURN 
  139. 3515  HCOLOR= 0: GOSUB 21060: HCOLOR= 3:ROBOT(XPSN,YPSN,RARM) = XH: GOSUB 21060: GOSUB 3425: RETURN 
  140. 3595  REM 
  141. 3596  REM  ***
  142. 3597  REM  *** DO SHOTS
  143. 3598  REM  ***
  144. 3599  REM 
  145. 3600  FOR K = 1 TO K2: GOSUB 3605: NEXT : RETURN 
  146. 3605  HCOLOR= 3: GOSUB 3620
  147. 3610  GOSUB 3625:NMN = NMN -1:ROBOT(8 -ROBOT(0,YPSN,1),K1,1) = 0:ROBOT(0,K1,1) = ROBOT(0,K1,1) -1
  148. 3615  GOSUB 3620: RETURN 
  149. 3620  FOR I = 57 TO ( FN XF(8 -ROBOT(0,YPSN,1)) -8)  STEP 3: HPLOT I, FN YF(YP) +7 TO I +3, FN YF(YP) +7: NEXT : RETURN 
  150. 3625  HCOLOR= 0:X2 = XPSN:XPSN = (8 -ROBOT(0,YPSN,1)): GOSUB 21000:XPSN = X2: RETURN 
  151. 3700  FOR XH = 19 TO 17  STEP  -1: GOSUB 3515: NEXT 
  152. 3705  FOR XH = 6 TO 5  STEP  -1: GOSUB 3410: NEXT : RETURN 
  153. 3795  REM 
  154. 3796  REM  ***
  155. 3797  REM  *** ALL ROBOTS WATCH
  156. 3798  REM  ***
  157. 3799  REM 
  158. 3800 X2 = XPSN:Y2 = YPSN: FOR YP = 1 TO 3:XH = 6
  159. 3805  IF K1 <YP  THEN XH = 3: GOTO 3820
  160. 3810  IF K1 >YP  THEN XH = 9: GOTO 3820
  161. 3815  GOTO 3825
  162. 3820  IF ROBOT(XP,YP,1) < >XH  THEN  GOSUB 3410
  163. 3825  NEXT YP
  164. 3830  FOR YP = 1 TO 3:XH = 10
  165. 3835  IF K1 <YP  THEN XH = 2: GOTO 3845
  166. 3840  IF K1 >YP  THEN XH = 8
  167. 3845  FOR XP = 3 TO 7: IF ROBOT(XP,YP,1)  AND ROBOT(XP,YP,1) < >XH  THEN  GOSUB 3410
  168. 3850  NEXT XP,YP:XP = X2:YP = Y2: RETURN 
  169. 4000  REM 
  170. 4001  REM  ***
  171. 4002  REM  *** COMPUTERS MOVE
  172. 4003  REM  ***
  173. 4004  REM 
  174. 4005 XC = XC +1: IF XC <10  THEN KEY = 0: RETURN 
  175. 4010  FOR I = 1 TO 18
  176. 4015  IF (PM(I,1) = ROBOT(0,1,1)  AND PM(I,2) = ROBOT(0,2,1))  AND PM(I,3) <ROBOT(0,3,1)  THEN 4045
  177. 4020  IF (PM(I,2) = ROBOT(0,2,1)  AND PM(I,3) = ROBOT(0,3,1))  AND PM(I,1) <ROBOT(0,1,1)  THEN 4050
  178. 4025  IF (PM(I,3) = ROBOT(0,3,1)  AND PM(I,1) = ROBOT(0,1,1))  AND PM(I,2) <ROBOT(0,2,1)  THEN 4055
  179. 4030  NEXT 
  180. 4035 :KEY =  INT( RND(1) *3) +1: IF ROBOT(0,KEY,1) <1  THEN 4035
  181. 4040 K2 =  INT( RND(1) *ROBOT(0,KEY,1)) +1:KEY = KEY +176: RETURN 
  182. 4045 KEY = 179:K2 = ROBOT(0,3,1) -PM(I,3): RETURN 
  183. 4050 KEY = 177:K2 = ROBOT(0,1,1) -PM(I,1): RETURN 
  184. 4055 KEY = 178:K2 = ROBOT(0,2,1) -PM(I,2): RETURN 
  185. 9995  REM 
  186. 9996  REM  ***
  187. 9997  REM  *** INSTRUCTIONS
  188. 9998  REM  ***
  189. 9999  REM 
  190. 10000  TEXT : HOME : VTAB 3: HTAB 17: PRINT "NIMBOT": VTAB 5: PRINT "   THIS IS THE GAME OF NIM. THE OBJECT  OF THE GAME IS THAT WHOEVER HAS TO KILL THE LAST ROBOT, LOSES. TO MAKE A MOVE,  TYPE IN THE NUMBER OF THE ROW THAT YOU"
  191. 10010  PRINT "WISH TO SHOOT IN. THEN TYPE IN THE      NUMBER OF ROBOTS THAT YOU WISH TO KILL. AFTER YOU GO, I WILL ALSO MAKE A MOVE,  AND THEN IT WILL BE YOUR TURN AGAIN."
  192. 10015  PRINT : PRINT "   SINCE I'M A KIND COMPUTER AND": PRINT "BASICALLY BIG HEARTED, I'LL EVEN        LET YOU HAVE THE FIRST MOVE !!"
  193. 10020  PRINT : PRINT "   BUT YOU'D BETTER BE CAREFUL, AS I'M  VERY GOOD AT THIS GAME !!!": RETURN 
  194. 19995  REM 
  195. 19996  REM  ***
  196. 19997  REM  *** SET UP PER GAME
  197. 19998  REM  ***
  198. 19999  REM 
  199. 20000 COUNT = 0:NMN = 12:MMODE = 0
  200. 20040  FOR I = 1 TO 7: FOR J = 1 TO 3:ROBOT(I,J,1) = 5:ROBOT(I,J,2) = 15:ROBOT(I,J,3) = 17: NEXT J,I
  201. 20045 ROBOT(2,1,1) = 0:ROBOT(0,1,1) = 5
  202. 20050 ROBOT(2,2,1) = 0:ROBOT(3,2,1) = 0:ROBOT(0,2,1) = 4
  203. 20055 ROBOT(2,3,1) = 0:ROBOT(3,3,1) = 0:ROBOT(4,3,1) = 0:ROBOT(0,3,1) = 3
  204. 20080 ARM(1) = 16:ARM(2) = 15
  205. 20085 ARM(3) = 18:ARM(4) = 17
  206. 20100  VTAB 23: INPUT "( PUSH RETURN WHEN YOU ARE READY ) : ";ANS$
  207. 20105  HGR2 : ROT= 0: SCALE= 1: POKE  -16302,0: HCOLOR= 3
  208. 20110  FOR XPSN = 1 TO 7: FOR YPSN = 1 TO 3: IF ROBOT(XPSN,YPSN,FACE)  THEN  GOSUB 21000
  209. 20115  NEXT YPSN,XPSN
  210. 20135  HPLOT 0,0 TO 279,0 TO 279,191 TO 0,191 TO 0,0
  211. 20140  RETURN 
  212. 20995  REM 
  213. 20996  REM  ***
  214. 20997  REM  *** DRAW ROBOTS
  215. 20998  REM  ***
  216. 20999  REM 
  217. 21000  GOSUB 21035
  218. 21005  GOSUB 21040
  219. 21010  GOSUB 21045
  220. 21015  GOSUB 21050
  221. 21020  GOSUB 21055
  222. 21025  GOSUB 21060
  223. 21030  RETURN 
  224. 21035  DRAW XXHEAD AT  FN XF(XPSN), FN YF(YPSN): RETURN 
  225. 21040  DRAW XBODY AT  FN XF(XPSN), FN YF(YPSN) +20: RETURN 
  226. 21045  DRAW XFEET AT  FN XF(XPSN), FN YF(YPSN) +30: RETURN 
  227. 21050  DRAW ROBOT(XPSN,YPSN,FACE) AT  FN XF(XPSN), FN YF(YPSN): RETURN 
  228. 21055  DRAW ROBOT(XPSN,YPSN,LARM) AT  FN XF(XPSN) -20, FN YF(YPSN) +23: RETURN 
  229. 21060  DRAW ROBOT(XPSN,YPSN,RARM) AT  FN XF(XPSN) +20, FN YF(YPSN) +23: RETURN